package yang.yu.sunny.application;

import yang.yu.sunny.domain.Order;
import yang.yu.sunny.domain.Product;
import yang.yu.sunny.domain.TimeRange;

import java.util.Date;
import java.util.List;

/**
 * 应用外观
 * Created by yyang on 16/3/23.
 */
public interface SunnyApplication {

    /**
     * 变更产品类别名称
     * @param categoryId 要变更名称的产品类别的ID
     * @param newName 要设置的新名称
     */
    void changeProductCategoryName(Long categoryId, String newName);

    /**
     * 变更产品名称
     * @param productId 要变更名称的产品的ID
     * @param newName 要设置的新名称
     */
    void changeProductName(Long productId, String newName);

    /**
     * 变更客户名称
     * @param customerId 要变更名称的顾客的ID
     * @param newName 要设置的新名称
     */
    void changeCustomerName(Long customerId, String newName);

    /**
     * 查找包含指定产品的订单,按订单生效时间升序排列
     * @param product 要包含的产品
     * @return 包含指定产品的订单列表,如果不存在则返回空列表
     */
    List<Order> findOrdersContains(Product product);

    /**
     * 获取指定时间范围内的销售额最大的N个产品的信息,以销售额的倒序排列
     * @param timeRange 订单生效的时间范围
     * @param n 结果的个数
     * @return 产品销售额信息列表
     */
    List<ProductSalesVolume> findTopNBestSeller(TimeRange timeRange, long n);
}
